Merge pull request #788 from evaryont/jobs-show-agent-name

Show the agent's name and user in the jobs panel

Andrew Cantino 9 years ago
parent
commit
f10e8d020c
3 changed files with 28 additions and 4 deletions
  1. 14 0
      app/helpers/jobs_helper.rb
  2. 4 1
      app/views/jobs/index.html.erb
  3. 10 3
      spec/controllers/jobs_controller_spec.rb

+ 14 - 0
app/helpers/jobs_helper.rb

@@ -18,4 +18,18 @@ module JobsHelper
18 18
       'in ' + distance_of_time_in_words(time, now)
19 19
     end
20 20
   end
21
+
22
+  # Given an queued job, parse the stored YAML to retrieve the ID of the Agent
23
+  # meant to be ran.
24
+  #
25
+  # Can return nil, or an instance of Agent.
26
+  def agent_from_job(job)
27
+    begin
28
+      Agent.find_by_id(YAML.load(job.handler).args[0])
29
+    rescue ArgumentError
30
+      # We can get to this point before all of the agents have loaded (usually,
31
+      # in development)
32
+      nil
33
+    end
34
+  end
21 35
 end

+ 4 - 1
app/views/jobs/index.html.erb

@@ -11,6 +11,7 @@
11 11
         <table class='table table-striped events'>
12 12
           <tr>
13 13
             <th>Status</th>
14
+            <th>Agent</th>
14 15
             <th>Created</th>
15 16
             <th>Next Run</th>
16 17
             <th>Attempts</th>
@@ -19,9 +20,11 @@
19 20
           </tr>
20 21
 
21 22
         <% @jobs.each do |job| %>
23
+          <% agent = agent_from_job(job) %>
22 24
           <tr>
23 25
             <td><%= status(job) %></td>
24
-            <td title='<%= job.created_at %>'><%= time_ago_in_words job.created_at %> ago</td>
26
+            <td><%= agent ? link_to(agent.name, agent_path(agent)) : "(deleted)" %></td>
27
+            <td title='<%= job.created_at %>'><%= time_ago_in_words job.created_at %> ago <%= agent ? "for #{agent.user.username}" : '' %></td>
25 28
             <td title='<%= job.run_at %>'>
26 29
               <% if !job.failed_at %>
27 30
                 <%= relative_distance_of_time_in_words job.run_at %>

+ 10 - 3
spec/controllers/jobs_controller_spec.rb

@@ -4,8 +4,15 @@ describe JobsController do
4 4
 
5 5
   describe "GET index" do
6 6
     before do
7
-      Delayed::Job.create!
8
-      Delayed::Job.create!
7
+      async_handler_yaml =
8
+        "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/class 'Agent'\nmethod_name: :async_check_without_delay\nargs:\n- %d\n"
9
+
10
+      Delayed::Job.create!(handler: async_handler_yaml % [agents(:jane_website_agent).id])
11
+      Delayed::Job.create!(handler: async_handler_yaml % [agents(:bob_website_agent).id])
12
+      Delayed::Job.create!(handler: async_handler_yaml % [agents(:jane_weather_agent).id])
13
+      agents(:jane_website_agent).destroy
14
+      Delayed::Job.create!(handler: async_handler_yaml % [agents(:bob_weather_agent).id], locked_at: Time.now, locked_by: 'test')
15
+
9 16
       expect(Delayed::Job.count).to be > 0
10 17
     end
11 18
 
@@ -19,7 +26,7 @@ describe JobsController do
19 26
       expect(users(:jane)).to be_admin
20 27
       sign_in users(:jane)
21 28
       get :index
22
-      expect(assigns(:jobs).length).to eq(2)
29
+      expect(assigns(:jobs).length).to eq(4)
23 30
     end
24 31
   end
25 32